/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ControleAcademico.View;

import ControleAcademico.Model.Dao.HistoricoAtividadesImp;
import ControleAcademico.Model.Pojo.Aluno;
import ControleAcademico.Model.Pojo.Atividade;
import ControleAcademico.Model.Pojo.HistoricoAtividades;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

/**
 *
 * @author arthur
 * @author renan
 * @author tais
 * @author vinicius
 */
public class MenuHistoricoAtividades {

    // Atributos
    private HistoricoAtividadesImp historicoAtividadesDao;

    public HistoricoAtividadesImp getHistoricoAtividadesDao() {
        return this.historicoAtividadesDao;
    }

    // Metodos
    public MenuHistoricoAtividades(){
        
    }
    
    public void criaListaVazia() {
        this.historicoAtividadesDao = new HistoricoAtividadesImp();
    }
    
    public HistoricoAtividadesImp getHistoricoAtividades() {return this.historicoAtividadesDao;}
    
    public void cadastrarHistorico(MenuAluno menuAluno, MenuAtividade menuAtividade){
        
        
        // Obtendo o aluno
        System.out.println("Informe o ID do aluno:");
        
        for(Aluno d : menuAluno.getAlunoDao().obterLista()) {
            System.out.println(d.toString());
        }
        int alunoId = Console.readInteger();
        
        Aluno alunoEncontrado = null;
        try {
            alunoEncontrado = menuAluno.getAlunoDao().buscar(alunoId);
        } catch (IOException e) {
            System.out.println("Aluno não encontrado.");
            return;
        } 
        
        // Obtendo a atividade
        System.out.println("Informe o ID da atividade:");
        
        for(Atividade d : menuAtividade.getAtividadeDao().obterLista()) {
            System.out.println(d.toString());
        }
        int atividadeId = Console.readInteger();
        
        Atividade atividadeEncontrada = null;
        try {
            atividadeEncontrada = menuAtividade.getAtividadeDao().buscar(atividadeId);
        } catch (IOException e) {
            System.out.println("Atividade não encontrada.");
            return;
        } 
        
        System.out.println("Informe a nota do aluno:");
        double nota = Console.readDouble();
        
        int id = this.historicoAtividadesDao.obterLista().size() + 1;
        
        HistoricoAtividades historicoAtividades = new HistoricoAtividades(alunoEncontrado,atividadeEncontrada,nota,id);

        
        try {
            this.historicoAtividadesDao.adicionar(historicoAtividades);
        } catch (IOException ex) {
            System.out.println("Historico de atividades não inserido.\nHistórico já consta na lista.");
        }
        
    }
    
    public void salvar() {
        
        try {
            File arquivo;  
  
            arquivo = new File("HistoricoAtividades.txt");  
            FileOutputStream fos = new FileOutputStream(arquivo);
            
            for (HistoricoAtividades a : getHistoricoAtividadesDao().obterLista()) {
                String escrita = (a.getId() + "\t" + a.getAvaliado().getId() + "\t" 
                        + a.getAvaliacao().getId() + "\t" + a.getNota() + "\n");
                
                fos.write(escrita.getBytes());
            }
            
            fos.close();  

        }catch (Exception ee) {  
            System.out.println(ee);
        }
    
    }
        
        
    public void load(MenuAluno menuAluno, MenuAtividade menuAtividade) {
        
        try {
            
            File entrada = new File("HistoricoAtividades.txt");
            InputStream leituraEntrada = new  FileInputStream(entrada);
            InputStreamReader leituraStream = new InputStreamReader(leituraEntrada);  
            BufferedReader leituraBuffer = new BufferedReader(leituraStream);

            String linha = leituraBuffer.readLine();
            this.criaListaVazia();
     
            while(linha!= null) {
                
                 String s[] = linha.split("\\t");
                 
                // Encontra o aluno
                Aluno aluno = null; 
                try {
                    aluno = menuAluno.getAlunoDao().buscar(Integer.parseInt(s[1]));
                 } catch (IOException e) {
                    System.out.println("Aluno não encontrado.");
                    return;
                 }        
                
                // Encontra a atividade
                Atividade atividade = null; 
                try {
                    atividade = menuAtividade.getAtividadeDao().buscar(Integer.parseInt(s[2]));
                 } catch (IOException e) {
                    System.out.println("Atividade não encontrada.");
                    return;
                 } 
                
               
                HistoricoAtividades novoHistoricoAtividades = new HistoricoAtividades
                        (aluno,atividade,Double.parseDouble(s[3]),Integer.parseInt(s[0]));
                
                this.getHistoricoAtividadesDao().adicionar(novoHistoricoAtividades);
                linha = leituraBuffer.readLine();
            }


            leituraBuffer.close();
            leituraStream.close();
            leituraEntrada.close();
  
        }catch (Exception ee) {  
            System.out.println("Erro na leitura do arquivo.");
            ee.printStackTrace();  
        }
    }
}
